Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

148
Views
Transformar una lista de puntos en un "rango" de índices

Digamos que tengo una lista de puntos de un torneo

 points = [0, 12, 9]

Y quiero tener una clasificación de los jugadores, por lo que los resultados esperados serían

 [1, 2, 0]

Porque el índice 1 está primero en el ranking, seguido por el índice 2 y luego el índice 0. Mi idea era usar un for para iterar a través de todos los números, obtener el valor más grande, encontrar el índice del valor más grande y luego asignar el valor. en el ranking, pero me parece innecesariamente largo y complicado. ¿Algun consejo?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Uso sorted :

 points = [0, 12, 9] res = sorted(range(len(points)), key=lambda x: points[x], reverse=True) print(res)

Producción

 [1, 2, 0]

La idea es ordenar los índices de la lista ( range(3) ) según su valor en la lista, por lo tanto, key=lambda x: points[x] . El verdadero inverso es porque desea una clasificación descendente.

over 4 years ago · Santiago Trujillo Report

0

points = [0, 12, 9] points_and_indices = [(p, i) for i, p in enumerate(points)] points_and_indices.sort(reverse=True) indices = [i for p, i in points_and_indices] print(indices)

producción:

 [1, 2, 0]

ACTUALIZAR

dices en un comentario

El primer índice que obtuvo esa cantidad de puntos está adelante

Desafortunadamente, esto hace que la solución anterior sea incorrecta para sus propósitos, porque los índices se incluyen en orden inverso.

Para explotar la estabilidad de las ordenaciones de Python, debemos no incluir los índices en la ordenación inversa o usar una función decreciente de los puntos en lugar de los puntos mismos.

Podemos clasificar según los puntos negativos y también condensarlo todo en una sola línea, como esta:

 points = [0, 12, 9, 12] indices = [i for _, i in sorted((-p, i) for i, p in enumerate(points))] print(indices)

producción:

 [1, 3, 2, 0]

De todos modos, la solución de Dani Mesejo es más pitónica, aunque el uso de una clave de clasificación puede causar algunos problemas a las personas que vienen de otros lenguajes de programación.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!